package jungPackage;

import java.awt.Color;

import mapPackage.ITroncon;
import edu.uci.ics.jung.graph.Vertex;
import edu.uci.ics.jung.graph.impl.UndirectedSparseEdge;

/**
 * Classe representant un Troncon, elle herite de UndirectedSpareEdge,
 * une arete bidirectionnelle.
 * @author Alex
 *
 */
public class JUNGTroncon extends UndirectedSparseEdge {

	protected boolean 	payant;
	protected boolean 	radar;
	protected boolean	touristique;
	protected int		longueur;
	protected int 		vitesseMax;
	
	protected Vertex	ville1;
	protected Vertex	ville2;
	protected JUNGRoute		saRoute;
	
	protected Color		saCouleur;
	
	public JUNGTroncon(Vertex v1, Vertex v2) {
		super(v1, v2);
		ville1 = v1;
		ville2 = v2;
		saRoute = null;
		saCouleur = Color.black;
	}
	
	public JUNGTroncon(Vertex v1, Vertex v2, boolean pay, boolean rad, boolean tour, int l, int vitesse, JUNGRoute r) {
		super(v1, v2);
		ville1 = v1;
		ville2 = v2;
		payant = pay;
		radar = rad;
		touristique = tour;
		longueur = l;
		vitesseMax = vitesse;
		saRoute = null;
		setSaRoute(r);
		saCouleur = Color.black;
	}
	
	public JUNGTroncon(Vertex v1, Vertex v2, ITroncon t, JUNGRoute r, Color c) {
		super(v1, v2);
		ville1 = v1;
		ville2 = v2;
		payant = t.isPayant();
		radar = t.isRadar();
		touristique = t.isTourisitique();
		longueur = t.getLongueur();
		vitesseMax = t.getVitesseMax();
		setSaRoute(r);
		saCouleur = c;
	}
	
	public int getLongueur() {
		return longueur;
	}

	public void setLongueur(int longueur) {
		this.longueur = longueur;
	}

	public boolean isPayant() {
		return payant;
	}

	public void setPayant(boolean payant) {
		this.payant = payant;
	}

	public boolean isRadar() {
		return radar;
	}

	public void setRadar(boolean radar) {
		this.radar = radar;
	}

	public boolean isTouristique() {
		return touristique;
	}

	public void setTouristique(boolean touristique) {
		this.touristique = touristique;
	}

	public Vertex getVille1() {
		return ville1;
	}

	public Vertex getVille2() {
		return ville2;
	}

	public int getVitesseMax() {
		return vitesseMax;
	}

	public void setVitesseMax(int vitesseMax) {
		this.vitesseMax = vitesseMax;
	}
	
	public JUNGRoute getSaRoute() {
		return this.saRoute;
	}
	
	public Color getSaCouleur() {
		return saCouleur;
	}
	
	/**
	 * La methode assigne la route a laquelle apprtient le troncon,
	 * s'il appartient deja a une route, on le retire de la liste
	 * des troncons de l'ancienne route et on l'ajoute a la nouvelle. 
	 * @param r Route
	 */
	public void setSaRoute(JUNGRoute r){
		// test si le troncon appartient deja a une route
		if (saRoute != null) {
			if (!saRoute.removeTroncon(this)) 
				System.out.println("Erreur : le troncon ne se trouve pas sur l'ancienne route!");
		}
		r.addTroncon(this);
		saRoute = r;
	}
	
	/**
	 * Methode appele automatiquement par le programme pour afficher les 
	 * infos d'une ville dans une pop-up
	 * @return
	 */
	public String getInfos() {
		String s = "<html><table>" +
				   "<tr><td><b>Route :</b></td><td>" + saRoute.getNom() + "</td></tr>" +
			   	   "<tr><td><b>Type :</b></td><td>" + saRoute.getType().getNom() + "</td></tr>" +
			   	   "<tr><td><b>Longueur :</b></td><td>" + longueur + " km</td></tr>" +
			   	   "<tr><td><b>Vitesse :</b></td><td>" + vitesseMax + " km/h</td></tr>" +
			   	   "<tr><td><b>Touristique :</b></td><td> ";
		if (touristique) s += "oui</td></tr>";
		else s += "non</td></tr>";
		s += "<tr><td><b>Radar :</b></td><td> ";
		if (radar) s += "oui</td></tr>";
		else s += "non</td></tr>";
		s += "<tr><td><b>Payant :</b></td><td> ";
		if (payant) s += "oui</td></tr>";
		else s += "non</td></tr>";
		s += "</table></html>";
		return s;
	}
	
}
